<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
	</head>
	<body>
		<script type="text/javascript">
			//1.安全的类型检测
			//2.作用域安全的构造函数
			    function Person(name,age,age){
			    	if(this instanceof Person){
			    		this.name = name;
			    		this.age = age;
			    		this.job = job;
			    	}else{
			    		return new Person(name,age,age)
			    	}
			    }
			//3.惰性载入函数
			   //惰性载入表示函数执行的分支仅会发生一次。
			   //有两种实现惰性载入的方式，第一种就是在函数被调用时再处理函数。
			   //第二种实现惰性载入的方式是在声明函数时就指定适当的函数。
			//4.函数绑定
			      var EventUntil = {
						addHandler:function(element,type,handler){
							if(element.addEventListener){
								element.addEventListener(type,handler,false);
							}else if(element.attachEvent){
								element.attachEvent('on'+type,handler);
							}else{
								element['on'+type] = handler;
							}
						},
						removeHandler:function(element,type,handler){
							if(element.removeEventListener){
								element.removeEventListener(type,handler,false)
							}else if(element.detachEvent){
								element.detachEvent('on'+type,handler);
							}else{
								element['on'+type] = null;
							}
						},
						getEvent:function(event){
							return event ? event : window.event;
						},
						getTarget:function(event){
							return event.target || event.srcElement;
						},
						preventDefault:function(event){
							if(event.preventDefault){
								event.preventDefault();
							}else{
								event.returnValue = false;
							}
						},
						stopPropagation:function(event){
							if(event.stopPropagation){
								event.stopPropagation()
							}else{
								event.cancelable = true;
							}
							
						}
				}
				var handler = {
					message:'Event handled',
					handleClick:function(event){
						console.log(this.message)
					}
				}
				var btn = document.getElementById('my-btn');
				EventUntil.addHandler(btn,'click',handler.handleClick.bind(handler));
			//5.函数柯里化
			   //函数柯里化用于创建已经设置好了一个或多个参数的函数。
		</script>
	</body>
</html>
